/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package ajedrez;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 *
 * @author Rub
 */
public class Impresora
{
    public Impresora()
    {
        File fGeneraciones = new File("generaciones.txt");
        fGeneraciones.delete();
    }

    public void ImprimirSalida(int piPoblacion, int piIteraciones, double pdFitnessValue, String psSolucion) throws IOException
    {
        FileWriter fichero = null;

        try
        {
            fichero = new FileWriter("output.txt", true);

            PrintWriter fileOut = new PrintWriter(fichero);
            fileOut.println(getDateTime() + ", Poblacion: " + piPoblacion + ", Iteraciones: " + piIteraciones + ", Ponderacion: " + pdFitnessValue + ", Solucion: " + psSolucion);
            fileOut.close();
        }
        catch(IOException ex)
        {
            throw ex;
        }
    }

    private String getDateTime()
    {
        DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
        Date date = new Date();
        return dateFormat.format(date);
    }

    public static void ImprimirTablero(int[] pViejaJugada, int[] pNuevaJuegada, float pValor, int nivel)
    {
        try
        {
            FileWriter fichero = null;

            try
            {
                fichero = new FileWriter("jugadas.txt", true);
                //fichero = new FileWriter("generaciones.txt");
                PrintWriter fileOut = new PrintWriter(fichero);
                fileOut.println(Impresora.ImprimirMovimiento(pViejaJugada, pNuevaJuegada, pValor, nivel));
                fileOut.println("Valor: " + pValor);
                fileOut.close();
            }
            catch(IOException ex)
            {
                throw ex;
            }
        }
        catch(Exception e)
        {}
    }

      

    public static String ImprimirMovimiento (int[] pViejaJuegada, int[] pNuevaJuegada, float pValor, int nivel)
    {
        String vsRetornar = new String();

        int Patron = Tablero.PATRON;
        int i = 0;

        boolean impresion1 = true;
        boolean impresion2 = true;


        //pViejaJuegada = ConvertirTablero(pViejaJuegada);
        //pNuevaJuegada = ConvertirTablero(pNuevaJuegada);

            vsRetornar = "\n";
            vsRetornar += "\n ---- Nivel: " + nivel + " ------ " + Tablero.now() + " ----------------------- ";
            vsRetornar += "\n         Juagada Vieja:                            Jugada Nueva:\n";

        try
        {
            while (i < 128)
            {
                if((i & Patron) == 0)
                {
                    String valor;

                    valor = (impresion1) ? "" + pViejaJuegada[i] : "" + pNuevaJuegada[i];

                    int tamanio = valor.length();
                    if(tamanio==1)
                        vsRetornar += "  " + valor + " ";
                    else
                        vsRetornar +=" " + valor + " ";
                }

                if((i == 119 || i == 103 || i == 87 || i == 71 || i == 55 || i == 39 || i == 23 || i == 7) && impresion1)
                    vsRetornar += "          ";
                else if((i == 103 || i == 87 || i == 71 || i == 55 || i == 39 || i == 23 || i == 7) && !impresion1)
                    vsRetornar += "\n";


                if(i == 15 || i == 31 || i == 47 || i == 63 || i == 79 || i == 95 || i == 111)
                {
                    if(impresion1)
                    {
                        impresion1 = false;
                        impresion2 = true;
                        i -= 16;
                    }
                    else if(impresion2)
                    {
                        impresion1 = true;
                        impresion2 = false;
                    }
                }

                if(i == 127 && impresion1)
                {
                    impresion1 = false;
                    impresion2 = true;
                    i -= 16;
                }

                i++;
            }
        }
        catch(Exception e)
        {
            System.out.println("Error: " + e.toString());
        }
        vsRetornar += "\n";

        return vsRetornar;
    }
}
